package com.cnaaa.xinqiao.dao;

import com.cnaaa.xinqiao.dto.Tuple2;
import com.cnaaa.xinqiao.dto.Tuple3;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 2018/10/22 Create by 郭文梁
 * ChartsDao
 * 报表分析相关数据访问
 *
 * @author 郭文梁
 * @date 2018/10/22
 */
@Repository
public interface ChartsDao {
    /**
     * 以区分组查看分值
     *
     * @return <pre>
     *     <code>
     * [
     *  {
     *      v1:区,
     *      v2:分值
     *  }，
     *  {
     *      v1:区,
     *      v2:分值
     *  }
     * ]
     *     </code>
     * </pre>
     */
    List<Tuple2<Integer, Integer>> scoreWithDistrict();

    /**
     * 日访问量
     *
     * @param date 日期 格式 yyyy-MM-dd
     * @return 访问量
     */
    Integer accessAmount(@Param("date") String date);

    /**
     * 查询总积分
     *
     * @return 总积分
     */
    Integer totalScore();

    /**
     * 查询总销售积分
     *
     * @return 总销售积分
     */
    Integer totalSalesScore();

    /**
     * 查询总消费次数
     *
     * @return 总消费次数
     */
    Integer totalConsumptionCount();

    /**
     * 查询各区人数
     *
     * @return List[Tuple(区 ， 人数), Tuple(区 ， 人数)]
     */
    List<Tuple2<Integer, Integer>> numberOfPeopleWithDistrict();

    /**
     * 查询月消费额
     *
     * @param year 年
     * @return List[Tuple(月份 ， 销售额)]
     */
    List<Tuple2<Integer, Integer>> salesVolume(@Param("year") Integer year);

    /**
     * 查询消费次数
     *
     * @param year 年
     * @return List[Tuple(月份, 次数)]
     */
    List<Tuple2<Integer, Integer>> salesCount(@Param("year") Integer year);

    /**
     * 查询各区每月分数增长量
     *
     * @param year 年
     * @return List[Tuple(区, 月, 增长量)]
     */
    List<Tuple3<String, Integer, Integer>> scoreIncrement(@Param("year") Integer year);

    /**
     * 查询分值在各区的分布百分比
     *
     * @return List[Tuple(区 ， 占比 ， 分数)]
     */
    List<Tuple3<String, Double, Integer>> scoreDistribution();
}
